home *** CD-ROM | disk | FTP | other *** search
/ Gekikoh Dennoh Club 1 / Gekikoh Dennoh Club Vol. 1 (Japan).7z / Gekikoh Dennoh Club Vol. 1 (Japan) (Track 1).bin / kowin / archive / apl / tvv132.lzh / symbol.c < prev    next >
C/C++ Source or Header  |  1995-04-16  |  2KB  |  106 lines

  1. /*    Copyright 1995 Ogasawara Hiroyuki (COR.)    */
  2.  
  3. #include    <corlib.h>
  4. #include    <HS_wlib.h>
  5.  
  6. #define        HLINE        480
  7. #define        VLINE        24
  8. #define        LINEBUF        (HLINE*VLINE)
  9. #define        LINESIZE    (LINEBUF/8)
  10.  
  11. static int    Shadow();
  12.  
  13. static unsigned char    buf1[LINESIZE*3/2],
  14.             buf2[LINESIZE*3/2];
  15. static Sheet        SB[10],
  16.             *Sp;
  17. static int        Offset;
  18.  
  19. Sheet *
  20. SheetShadow( msg, attr, font )
  21. char    *msg;
  22. {
  23.     Sheet    *sp;
  24.     if( Offset >= LINESIZE || Sp >= SB+10 ){
  25.         ShadowInit();
  26.         return    0;
  27.     }
  28.     sp= WindowSetFontAddress( (attr<<8)+font, msg );
  29.     Sp->buf1= (short*)(buf1+Offset);
  30.     Sp->buf2= (short*)(buf2+Offset);
  31.     Offset+= Shadow( Sp, sp, strlen(msg)*font/2, font );
  32.     return    Sp++;
  33. }
  34.  
  35. ShadowInit()
  36. {
  37.     Sp= SB;
  38.     Offset= 0;
  39. }
  40.  
  41. static int
  42. Shadow()
  43. {
  44.     asm( "
  45.         movem.l    4(sp),a0-a1    *ssp,sp
  46.         movem.l    12(sp),d0-d1    *h,v
  47.         movem.l    d3-d4/a3-a4,-(sp)
  48.  
  49.         move.l    d0,(a0)+    * h
  50.         move.l    d1,(a0)+    * v
  51.         addq.l    #8,d0        *    h+= 8
  52.         addq.l    #7,d0        *    h+= 7 (+15)
  53.         lsr.l    #4,d0        *    h>>= 4
  54.         move.l    d0,(a0)+    * hword
  55.         move.l    d0,d4
  56.         move.l    (a0)+,a2    * ap= ssp->buf1
  57.         move.l    (a0),a3        * bp= ssp->buf2
  58.         move.l    12(a1),a1    * fp= sp->buf1
  59.         move.l    a1,a4
  60.  
  61.     * first line
  62.         move.l    d4,d3
  63.         subq.l    #1,d3
  64.     _1_line:
  65.         move.w    (a1)+,d0    * f0= *fp++
  66.         move.w    d0,d2
  67.         not.w    d2        * f1= ~f0
  68.         move.w    d2,(a2)+    * *bp++= f1
  69.         roxr.w    #1,d0
  70.         and.w    d2,d0
  71.         move.w    d0,(a3)+    * *ap++= (f0>>1)&f1
  72.         dbra    d3,_1_line
  73.  
  74.  
  75.     * 2nd .. 23th line
  76.         subq.l    #2,d1        * v-2
  77.     shadow_loop:
  78.  
  79.         add.w    #1024/8,a4
  80.         move.l    a4,a1
  81. *        add.w    #1024/8-48/8,a1    * fp+= sp->hword-hw
  82.  
  83.         move.l    d4,d3
  84.         subq.l    #1,d3
  85.     _2_line:
  86.         move.w    (a1)+,d0    * f0= *fp++
  87.         move.w    d0,d2
  88.         not.w    d2        * f1= ~f0
  89.         move.w    d2,(a2)+    * *bp++= f1
  90.         or.w    -1024/8-2(a1),d0 * f0|= b0
  91.         roxr.w    #1,d0
  92.         and.w    d2,d0
  93.         move.w    d0,(a3)+    * *ap++= (f0>>1)&f1
  94.         dbra    d3,_2_line
  95.  
  96.         dbra    d1,shadow_loop
  97. *        move.l    a3,(a0)
  98. *        move.l    a2,-(a0)
  99.         sub.l    (a0),a3
  100.         move.l    a3,d0
  101.  
  102.         movem.l    (sp)+,d3-d4/a3-a4
  103.     " );
  104. }
  105.  
  106.